package com.zhouhong;

/**
 * @ClassName: Algorithm-and-Data-Structure
 * @Description: 在排序数组中查找一个数，如果存在且有多个元素，返回索引值最大的哪一个
 *               ，如果不存在返回比给定数大的最小值
 * @Author: zhouhong
 * @Create: 2021-04-08 01:25
 **/

public class SearchCeil {
    private SearchCeil(){}
    // >target ,返回最小值索引
    // == target , 返回最大索引
    public static int ceil(int[] arr, int target){
        int l = 0, r = arr.length;
        // 在 arr[l....r] 中寻找解
        while (l < r){
            int mid = l + (r - l) / 2;
            if (arr[mid] <= target){
                l = mid + 1;
            }else {
                r = mid;
            }
        }
        if (l - 1 >= 0 && arr[l -1] == target){
            return l - 1;
        }else {
            return l;
        }
    }

    public static void main(String[] args) {
        int[] arr = {2,9,12,23,45,45,56,67,78,89,90};
        System.out.println(ceil(arr, 45));
    }

}
